2020-2021 Sunseeker Telemetry and Lighting System
pmm_ex2_vmon1160mV.c
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 /*******************************************************************************
33  * MSP430i2xx Power Management Module - Voltage Monitor 1160mV
34  *
35  * Description: In this example, the device is setup to compare the VMONIN pin
36  * to 1160mV. When the VMONIN pin drops below 1160mV the VMON interrupt fires
37  * and the ISR is run. The voltage monitor interrupt flag is not clearable
38  * by software and will only stop interrupting if VMON interrupt is disabled
39  * or VMONIN goes above 1160mV. The LED is turned off when the voltage monitor
40  * pin is below 1160mV and turns on when it is above. You can also use the
41  * voltage monitor to monitor DVCC.
42  *
43  *
44  * MSP430i2041
45  * ------------------
46  * /|\| |
47  * | | P1.4|-->LED
48  * --|RST |
49  * | |
50  * | |
51  * | P2.3|<--VMONIN
52  * | |
53  * | |
54  *
55  * Author: Zack Lalanne
56  ******************************************************************************/
57 
58 #include "driverlib.h"
59 
60 int main(void) {
61 
62  WDT_hold(WDT_BASE);
63 
64  // Setup the LED
65  GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
66  GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4);
67 
68  // Setup the voltage monitor to compare VMONIN to 1160mV
69  PMM_setupVoltageMonitor(PMM_VMONIN_1160MV);
70 
71  // When started up, VMON requires a settling time of 0.5us
72  // MCLK = ~16MHz; 1 cycle = ~0.0625us
73  __delay_cycles(10);
74 
75  // Setup VMONIN Pin
76  GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,
77  GPIO_PIN3,
78  GPIO_TERNARY_MODULE_FUNCTION);
79 
80  // Enable the voltage monitor interrupt
81  PMM_enableInterrupt(PMM_VMON_INTERRUPT);
82  __bis_SR_register(GIE);
83 #if defined(__GNUC__)
84  // Not necessary in Rev. D silicon, but appeases a warning for GCC
85  __asm(" nop");
86 #endif
87 
88  while(1) {
89  // If we are not in ISR then VMONIN > 1160mV
90  GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN4);
91  }
92 }
93 
94 
95 #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
96 #pragma vector=VMON_VECTOR
97 __interrupt
98 #elif defined(__GNUC__)
99 __attribute__((interrupt(VMON_VECTOR)))
100 #endif
101 void VMON_ISR(void) {
102  // VMONIN < 1160mV, LED Off
103  GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
104 }
GPIO_setOutputHighOnPin(GPIO_PORT_LED1|GPIO_PORT_LED2, GPIO_PIN_LED1|GPIO_PIN_LED2)
GPIO_setOutputLowOnPin(GPIO_PORT_LED1|GPIO_PORT_LED2, GPIO_PIN_LED1|GPIO_PIN_LED2)
__delay_cycles(500000)
void VMON_ISR(void)
int main(void)